package com.hlw.myojbackendjudgeservice.judge.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import lombok.extern.slf4j.Slf4j;



/**
 * 用于创建测试程序用到的交换机和队列（只用在程序启动前执行一次）
 */
@Slf4j
public class InitRabbitMq {

    public static void doInit() {
        try {
            // 1. 创建连接工厂（ConnectionFactory 是连接 RabbitMQ 的入口）
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost"); // 设置 RabbitMQ 服务的主机地址，本地就是 localhost

            // 2. 创建连接
            Connection connection = factory.newConnection();

            // 3. 创建信道（channel 是我们和 RabbitMQ 打交道的“通道”）
            Channel channel = connection.createChannel();

            // 4. 声明交换机（Exchange）：名字为 code_exchange，类型为 direct（直连类型）
            String EXCHANGE_NAME = "code_exchange";
            channel.exchangeDeclare(EXCHANGE_NAME, "direct");

            // 5. 声明队列：名字为 code_queue，durable=true 表示持久化，其他参数为默认
            String queueName = "code_queue";
            channel.queueDeclare(queueName, true, false, false, null);

            // 6. 绑定队列和交换机，通过 routingKey 关联
            channel.queueBind(queueName, EXCHANGE_NAME, "my_routingKey");
            log.info("消息队列启动成功");
        } catch (Exception e) {
            log.error("消息队列启动失败");
        }

    }
}
